// Problem: 
// Contest: 
// URL: 
// Memory Limit: 
// Time Limit: 
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}
signed main()
{
	int T=1;
//	cin>>T;
	while(T--)
	{
		int n,k;
		cin>>n>>k;
//		vector<vector<bool>> v(n+1,vector<bool>(n+1));
//		for(int i=1;i<=k;i++)
//		{
//			int x,y;
//			cin>>x>>y;
//			for(int j=1;j<=n;j++)
//			{
//				v[x][j]=1;
//				v[j][y]=1;
//			}
//		}
//		int ans=0;
//		for(int i=1;i<=n;i++)
//		{
//			for(int j=1;j<=n;j++)
//			{
//				if(v[i][j])ans++;
//			}
//		}
//		cout<<ans;
		int ans=0;
		int h=n,l=n;
		//vector<bool> x(n+1),y(n+1);
		unordered_map<int,bool> x,y;
		for(int i=1;i<=k;i++)
		{
			int a,b;
			a=read(),b=read();
			if(!x[a]&&!y[b])
			{
				x[a]=1;
				y[b]=1;
				ans+=l;
				ans+=h;
				ans--;
				h--;
				l--;
			}
			else if(!x[a])
			{
				x[a]=1;
				ans+=l;
				h--;
			}
			else if(!y[b])
			{
				y[b]=1;
				ans+=h;
				l--;
			}
		}
		cout<<ans;
	}
	return 0;
}
